/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.dto.ParametroDto;
import com.brain.core.dto.SocioNegocioDetaDto;
import com.brain.core.dto.SocioNegocioDto;
import com.brain.core.dto.UbigeoDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.RecursosManager;
import com.brain.core.manager.SocioNegocioManager;
import com.brain.core.view.util.ApplicationHelper;
import com.brain.core.view.util.ConstantesCore;

import javax.faces.event.ActionEvent;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

@Controller("socioNegocioMBean")
@Scope("session")
public class SocioNegocioMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(SocioNegocioMBean.class);
    
    @Resource
    private SocioNegocioManager manager;
    @Resource
    private RecursosManager recursosManager;
    private List<SocioNegocioDto> lista;
    private SocioNegocioDto dto;
    private SocioNegocioDto dtoFiltro;
    private String keyTitulo = "socio.negocio.panel";
    private int accionSocioNegocio;
    private SocioNegocioDetaDto socioNegocioDetaDto;
    private List<ParametroDto> listaTiposDocumento;
    private List<ParametroDto> listaRubros;
    private List<ParametroDto> listaCargos;
    private List<ParametroDto> listaEstados;
    private List<ParametroDto> listaTiposDetalle;
    private List<ParametroDto> listaEstadosDetalle;
    private List<ParametroDto> listaSexos;
    private ParametroDto tipoDocumento;
    
    @Autowired
    private ApplicationMBean applicationMBean;
    
    @Autowired
    private SessionMBean sessionMBean;

    public SocioNegocioMBean() {
       // sessionMBean.setAccion(ConstantesWeb.Formulario.LISTA);
        //sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dtoFiltro = new SocioNegocioDto();        
    }
    
    public String iniciar () {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new SocioNegocioDto();
        this.dtoFiltro.setNumeroDocumento("");
        this.dtoFiltro.setDescripcion("");
        return ConstantesCore.UrlNavegacion.URL_LISTA_SOCIOS_NEGOCIO;
    }

    public String nuevo() {
        sessionMBean.setAccion(ConstantesCore.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.lista = new ArrayList<SocioNegocioDto>();
        this.dto = new SocioNegocioDto();        
        this.dto.setId(null);
        this.dto.setTipoDocumentoDto(new ParametroDto(ConstantesCore.Parametro.PARAMETRO_TIPO_DOCUMENTO_RUC));
        this.dto.setPaisDto(new UbigeoDto(ConstantesCore.Parametro.UBIGEO_PERU));
        return ConstantesCore.UrlNavegacion.URL_SOCIO_NEGOCIO;
    }

    public String editar() {
        sessionMBean.setAccion(ConstantesCore.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.SOCIO_NEGOCIO, this.dto.getId());
        ApplicationHelper.cargarBitacoraEntidad(ConstantesCore.Entidad.SOCIO_NEGOCIO, this.dto.getId());
        return ConstantesCore.UrlNavegacion.URL_SOCIO_NEGOCIO;
    }

    public String ver() {
        sessionMBean.setAccion(ConstantesCore.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.SOCIO_NEGOCIO, this.dto.getId());
        ApplicationHelper.cargarBitacoraEntidad(ConstantesCore.Entidad.SOCIO_NEGOCIO, this.dto.getId());
        return ConstantesCore.UrlNavegacion.URL_SOCIO_NEGOCIO;
    }

    public void buscar(ActionEvent ae) {
        
        try {
            //this.lista = this.manager.obtenerSociosNegocio(dtoFiltro);
            this.lista = this.manager.obtenerSociosNegocioMantenimiento(dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String guardar() {
        String to = null;
        String mensajeTrx = "";

        {
            this.dto.setUsuario(sessionMBean.getSessionUsuarioDto().getId());
            this.dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
            this.dto.setTerminal(sessionMBean.getSessionTerminal());                        
        }
        
        if (this.dto.getTipoDocumentoDto().getId().equals(21L)||this.dto.getTipoDocumentoDto().getId().equals(30044L)||this.dto.getTipoDocumentoDto().getId().equals(30043L)) {
            this.dto.setDescripcion(this.dto.getRazonSocial());
        }else {
            this.dto.setDescripcion(this.dto.getApellidoPaterno() +" " + this.dto.getApellidoMaterno() + " " + this.dto.getNombres());
        }
        
        
        if (sessionMBean.getAccion() == ConstantesCore.Formulario.NUEVO) {
            try {                
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.nuevo(this.dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);
                
                to = retroceder();
            } catch (Exception ex) {
                showError(ex.getMessage());
                to = null;
            }
        }else if (sessionMBean.getAccion() == ConstantesCore.Formulario.EDITAR) {
            try {
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.editar(this.dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);
                
                to = retroceder();
            } catch (Exception ex) {
                showError(ex.getStackTrace().toString());
                ex.getStackTrace();
                to = null;
            }
        }
        return to;
    }
    public String back() {
        this.dtoFiltro = new SocioNegocioDto();       
        this.dtoFiltro.setId(this.dto.getId());
        this.dtoFiltro.setNumeroDocumento("");
        this.dtoFiltro.setDescripcion("");
        buscar(null);
        sessionMBean.setAccion(ConstantesCore.Formulario.LISTA);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_LISTA_SOCIOS_NEGOCIO;
    }

    public String retroceder() {
        
        sessionMBean.setAccion(ConstantesCore.Formulario.LISTA);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_LISTA_SOCIOS_NEGOCIO;
    }

    
    public int getAccionSocioNegocio() {
        return accionSocioNegocio;
    }

    public void setAccionSocioNegocio(int accionSocioNegocio) {
        this.accionSocioNegocio = accionSocioNegocio;
    }

    public SocioNegocioDto getDto() {
        return dto;
    }

    public void setDto(SocioNegocioDto dto) {
        this.dto = dto;
    }

    public SocioNegocioDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(SocioNegocioDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public List<SocioNegocioDto> getLista() {
        return lista;
    }

    public void setLista(List<SocioNegocioDto> lista) {
        this.lista = lista;
    }

    public SocioNegocioManager getManager() {
        return manager;
    }

    public void setManager(SocioNegocioManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public SocioNegocioDetaDto getSocioNegocioDetaDto() {
        return socioNegocioDetaDto;
    }

    public void setSocioNegocioDetaDto(SocioNegocioDetaDto socioNegocioDetaDto) {
        this.socioNegocioDetaDto = socioNegocioDetaDto;
    }

    public List<ParametroDto> getListaTiposDocumento() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.DOCUMENTOS_DE_IDENTIFICACION);
    }

    public void setListaTiposDocumento(List<ParametroDto> listaTiposDocumento) {
        this.listaTiposDocumento = listaTiposDocumento;
    }

    public List<ParametroDto> getListaRubros() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.SOCIO_DE_NEGOCIO_RUBROS);
    }

    public void setListaRubros(List<ParametroDto> listaRubros) {
        this.listaRubros = listaRubros;
    }

    public List<ParametroDto> getListaCargos() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.CARGO_LABORAL);
    }

    public void setListaCargos(List<ParametroDto> listaCargos) {
        this.listaCargos = listaCargos;
    }

    public List<ParametroDto> getListaEstados() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.SOCIO_DE_NEGOCIO_ESTADOS);
    }

    public void setListaEstados(List<ParametroDto> listaEstados) {
        this.listaEstados = listaEstados;
    }

    public List<ParametroDto> getListaEstadosDetalle() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.SOCIO_DE_NEGOCIO_DETALLE_ESTADOS);
    }

    public void setListaEstadosDetalle(List<ParametroDto> listaEstadosDetalle) {
        this.listaEstadosDetalle = listaEstadosDetalle;
    }

    public List<ParametroDto> getListaTiposDetalle() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.SOCIO_DE_NEGOCIO_DETALLE_TIPOS);
    }

    public void setListaTiposDetalle(List<ParametroDto> listaTiposDetalle) {
        this.listaTiposDetalle = listaTiposDetalle;
    }

    public List<ParametroDto> getListaSexos() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.GENEROS);
    }

    public void setListaSexos(List<ParametroDto> listaSexos) {
        this.listaSexos = listaSexos;
    }

    public ParametroDto getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(ParametroDto tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }
}
